package com.sojson.annotation.aspect;

import org.aspectj.lang.annotation.Pointcut;

import com.sojson.constant.ConstantServlet;

/**
 * 基础切点类
 * 
 * @author liu
 * @date 2021-07-04
 */
public class PointcutsBase {

    /** Mapping注解的包路径 */
    private static final String ANNO_MAPPING = "org.springframework.web.bind.annotation";
    /** Controller下所有方法织入点 */
    public static final String POINT_CONTROLLER =
        "execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..*(..))";

    // =======================================================================================================
    // =======================================================================================================
    // =======================================================================================================

    /** Controller下所有方法织入点 */
    @Pointcut(POINT_CONTROLLER)
    public void controller() {}

    /** 所有find方法织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..find*(..))")
    public void find() {}

    /** 所有get方法(不包含获取验证码)织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..get*(..))&&!execution(* "
        + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..getVerifyCode*(..))")
    public void getNoVerifyCode() {}

    /** 所有query方法织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..query*(..))")
    public void query() {}

    /** 所有select方法织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..select*(..))")
    public void select() {}

    /** 所有count方法织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..count*(..))")
    public void count() {}

    /** 所有list方法织入点 */
    @Pointcut("execution(* " + ConstantServlet.PACKAGE_DEFAULT_CONTROLLER_ALL + "..list*(..))")
    public void list() {}

    /** 所有@RequestMapping注解的方法 */
    @Pointcut("@annotation(" + ANNO_MAPPING + ".RequestMapping)")
    public void requestMapping() {}

    /** 所有@GetMapping注解的方法 */
    @Pointcut("@annotation(" + ANNO_MAPPING + ".GetMapping)")
    public void getMapping() {}

    /** 所有@PostMapping注解的方法 */
    @Pointcut("@annotation(" + ANNO_MAPPING + ".PostMapping)")
    public void postMapping() {}

    /** 所有@PutMapping注解的方法 */
    @Pointcut("@annotation(" + ANNO_MAPPING + ".PutMapping)")
    public void putMapping() {}

    /** 所有@DeleteMapping注解的方法 */
    @Pointcut("@annotation(" + ANNO_MAPPING + ".DeleteMapping)")
    public void deleteMapping() {}

    @Pointcut("@annotation(" + ConstantServlet.PACKAGE_DEFAULT_ANNOTATION_ALL + ".ReCommit)" + "|| @within("
        + ConstantServlet.PACKAGE_DEFAULT_ANNOTATION_ALL + ".ReCommit)")
    public void reCommit() {}

    // =======================================================================================================
    // =======================================================================================================
    // =======================================================================================================

    /** Controller下所有方法切点 */
    public static final String POINTCUT_CONTROLLER = "controller()";

    /** 获取数据切点 */
    public static final String POINTCUT_GET =
        //
        "find()"
            //
            + "||getNoVerifyCode()"
            //
            + "||query()"
            //
            + "||select()"
            //
            + "||count()"
            //
            + "||list()"
    //
    ;
    //

    /** 自定义的除获取外的控制器 */
    public static final String POINTCUT_MAPPING_GET_NO =
        //
        "postMapping()"
            //
            + "||putMapping()"
            //
            + "||deleteMapping()"
    //
    ;

    /** 所有需要放置重复提交的控制器 */
    public static final String POINTCUT_RE_COMMIT =
        //
        "postMapping()"
            //
            + "||putMapping()"
            //
            + "||deleteMapping()"
            //
            + "||reCommit()"
    //
    ;

}